{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# In Depth: Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<!--BOOK_INFORMATION-->\n",
    "\n",
    "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n",
    "\n",
    "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- Naive Bayes (discussed earlier in [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb)) is a good starting point for classification tasks\n",
    "- linear regression models are a good starting point for regression tasks.\n",
    "    - can be fit very quickly, and \n",
    "    - are very interpretable.\n",
    "    \n",
    "The simplest form of a linear regression model (i.e., fitting a straight line to data) \n",
    "- Extended to model more complicated data behavior.\n",
    "- We will see how linear models can be generalized to account for more complicated patterns in data.\n",
    "\n",
    "We begin with the standard imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.285125Z",
     "start_time": "2019-06-20T03:53:19.276326Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns; sns.set()\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Simple Linear Regression\n",
    "\n",
    "We will start with the most familiar linear regression, a straight-line fit to data.\n",
    "A straight-line fit is a model of the form\n",
    "$$\n",
    "y = ax + b\n",
    "$$\n",
    "where $a$ is commonly known as the *slope*, and $b$ is commonly known as the *intercept*.\n",
    "\n",
    "Consider the following data, which is scattered about a line with a slope of 2 and an intercept of -5:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.484977Z",
     "start_time": "2019-06-20T03:53:19.321420Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEBCAYAAACdctWRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAF5hJREFUeJzt3X9sVfX9x/HXLYWCowS83lqX4Y9Vk/ptoGPOaMXQYkax0IrriBMdxfS7qHFzG9ncGHFjMcoKbqkxG/9sbo5o9pVFikKEYVIl0jYxM18p4I/4ZYASKFxL+VGtpfSe7x/kXrntvZd7zz3nnns+9/n4i3O9t+fzofjq6fvzK2BZliUAgJGKvG4AAMA9hDwAGIyQBwCDEfIAYDBCHgAMRsgDgMEIeQAwGCEPAAYj5AHAYIQ8ABiMkAcAgxHyAGAwQh4ADFbs1Y0HBj5TJGJvA8xgcKr6+wcdblF+K8Q+S4XZb/pcODLpd1FRQDNmfCXje3gW8pGIZTvko58vNIXYZ6kw+02fC4fb/aZcAwAGI+QBwGCEPAAYLO2QHxwcVGNjo44cOSJJ+tWvfqX6+notWbJES5Ys0euvv+5aIwEA9qQ18Lpnzx49/vjjOnToUOy1ffv26YUXXlBZWZlbbQMAY/Ts79PmXQfUf2ZYwWklaq6t0F11pa7fN60n+U2bNmnNmjWxQB8aGtLRo0e1evVqNTU16dlnn1UkEnG1oQDgVz37+/T37R+o/8ywJKn/zLD+vv0DvfnOJ67fO2BZVtrzd+644w5t3LhRlmWpra1Na9asUWlpqR566CE1NjbqnnvucbOtAOBLrU/uVHhgaNzroRlT9NfH6129t6158jNnztSf/vSn2PXy5cu1ZcuWjEK+v3/Q9vzQUKhU4fBZW5/1q0Lss1SY/abP/pKoDFNTVR73nkQBL0mfDgyl3e+iooCCwakZt8/W7JoPP/xQ//rXv2LXlmWpuNizdVUA4IlkZZie/X1x7wtOK0n4+StmTHG9jbZC3rIsrV27VqdPn9bIyIheeuklLViwwOm2AUBe27zrgM6djx+PPHc+os27DsS91lxboUnF8XE7qbhILQ03ut5GW4/flZWVevDBB7Vs2TKdP39e9fX1amxsdLptAJDXok/wl3o9Wr4ZW9apu2mm62WqjEK+s7Mz9uf7779f999/v+MNAgC/CE4rSRj0icozNVXl42r1ucCKVwCwKVkZprm2wqMWjUfIA4BNNVXlWtFQGXtynzqlWBOLA/rz1vf02IaucQOwXmBKDABjJZvemM60x3RFyzDRmTbRgdjoTJvoe7xCyAMwUrLQ/b8jp9S1t8/xME4108bLkKdcA8BIyUJ317tH05r2mKl0Z9rkGiEPwEjJwjXZQvtswzjZgqdkr+cKIQ/ASMnCtSiQ+P1FAam1rdP2gGm+zrQh5AEYqbm2QsUT4hO9eEJAtd/46rgwlr58wk+2NcGljJ1pE5xWohUNlZ7W4yUGXgEYzBpTm7Eilq7/2nRd/7Xpsdk1RYHxJRy7A6ZeLXhKhZAHYKTNuw5odEx4j1oXXn/6kbmxMG5t60zwae8HTJ1CuQaAkdKd7ZKvA6ZOIeQBGCnd8M7XAVOnEPIAjJRueOfrgKlTqMkDMFKy7X0ThXc+Dpg6hZAHYCyTwztdlGsAwGCEPAAYjJAHAIMR8gBgMEIeAAzG7BoAxnLyBCi/IuQBGClfj+PLNco1AIyU6ji+QkLIAzBSvh7Hl2uEPAAjmb67ZLoIeQBGMn13yXQx8ArASJlsUGYyQh6AsdigjHINABiNkAcAg1GuAQqQkytBWVWa3wh5oMA4uRKUVaX5j3INUGCcXAnKqtL8x5M8YLix5RQnV4KyqjT/8SQPGCxaTomGbqrwtbMSlFWl+Y8necBgicopidhdCdpcWxFXk8/ma10KA7z2EPKAwdItm8ydZW/RUK5WlTLAax8hDxgsVQ3+Yr0H+m3fIxerSlMN8BLyqaVdkx8cHFRjY6OOHDkiSeru7lZTU5Pq6+vV3t7uWgMB2Jdok65E8n2glAFe+9IK+T179mjZsmU6dOiQJOmLL77Q6tWrtWHDBr322mvat2+fdu3a5WY7AdhQU1WuFQ2VsYHQokDi9xUFLpREvNCzv0+tT+5Ua1unHtvQlbAdDPDal1bIb9q0SWvWrFFZWZkkqbe3V9dcc41mzpyp4uJiNTU1aceOHa42FIA9NVXlevqRufrrqjv0343/lfDJPmJJf9/+Qc6DPlprDw8MSfqy1j62HWwbbF9aNfmnnnoq7vrEiRMKhUKx67KyMh0/fjyjGweDUzN6/1ihUGlWn/ejQuyzVJj9dqvPd9WValrpZLX/z/8qErHi/tu58xFt2X1Qd9Xd4Mq9E9myuydhrX1sO6Lt3rj9fX06MKQrZkxRS8ONqrtpZs7a6ha3/33bGniNRCIKBL78vc+yrLjrdPT3D477R5auUKhU4fBZW5/1q0Lss1SY/Xa7z1VXT0/6/154YCinf9/RJ/h02lF19XSte6gm/n0+/7eRyfe6qChg6+HYVsiXl5crHA7HrsPhcKyUAyD/JZt1Y6fGnc38dSfbgcRsrXitrq7WwYMHdfjwYY2Ojmrbtm2aN2+e020D4JLm2goVT4j/7bt4QiDjGneiFbWZ1PaptbvP1pN8SUmJ2tra9Oijj2p4eFi1tbW68847nW4bABdZY0o2Y6/Tke389eh7tuw+qPDAECtZXZBRyHd2dsb+XFNTo1dffdXxBgFw3+ZdBzQ6JtNHLWW8uMiJ+es1VeW6q+4G39fX8xUblAEFyKnFRcxfz3+EPFCAnApnaur5j5AHCpBT4Tx2RW1wWolWNFRSU88jbFAGFCAnd4/MdIOyRFMu76orvAVvuULIAwUqF7tHjpVsy+BppZNVdfX0nLalUBDyAJJy+qCOZFMuN25/f9xqVjiDkAeQkBsHdSSbvfNpku0NkD0GXgEklGqhk13JZu9cMWOK7a+J1Ah5AAm5cVBHslk9LQ032v6aSI2QB5CQGwudkk25NGHL4HxFTR5AQs21FXE1ecmZhU5ezOopZIQ8gIScnEsP7xDyAJLiqdv/qMkDgMEIeQAwGCEPAAYj5AHAYIQ8ABiMkAcAgxHyAGAwQh4ADMZiKMAFTu/DDthFyAMOc2MfdsAuyjWAw9zYhx2wi5AHHObGPuyAXYQ84DA39mEH7CLkAYclO/0o233YATsYeAUcxj7syCeEPOAC9mFHvqBcAwAGI+QBwGCEPAAYjJAHAIMx8ArYwN408AtCHsgQe9PATyjXABlibxr4CSEPZIi9aeAnhDyQIfamgZ9kVZNfvny5Tp48qeLiC1/miSeeUHV1tSMNA/JVc21FXE1eYm8a5C/bIW9Zlg4dOqQ33ngjFvJAIRi7N01RIL4mz+Ar8ontdP7Pf/4jSWptbdWpU6d0zz336Pvf/75jDQPsyNXUxujXZJYN8p3tkD9z5oxqamr061//WiMjI2ppadF1112nuXPnpvX5YHCq3VtLkkKh0qw+70eF2Gcp/X6/+c4n2rjjQw2PjEq6ELobd3yoaaWTVXfTTMfbtWV3T8JZNlt2H9RddTdk9bUL8XtdiH2W3O+37ZCfM2eO5syZE7teunSpdu3alXbI9/cPKhKxbN07FCpVOHzW1mf9qhD7LGXW7+e37Y8FfNTwyKie37ZfVVdPd7xt4YGhpK9n870qxO91IfZZyqzfRUUBWw/HtmfX/Pvf/1ZPT0/s2rIsavPwVK6nNjLLBn5gO+TPnj2r9evXa3h4WIODg+ro6NCCBQucbBuQkVyHLidAwQ9sP3rPnz9fe/bs0d13361IJKL77rsvrnwD5FqupzZyAhT8IGBZlr3CeJaoyWemEPssZd5vEzYOK8TvdSH2WcpNTZ4iOozCsXtAPLY1AACDEfIAYDBCHgAMRsgDgMEIeQAwGLNr4BsmTI8Eco2Qhy9wripgD+Ua+ALnqgL2EPLwBc5VBewh5OELqTYZ69nfl8OWAP5CyMMXUm0yRskGSI6BV2QkFzNcLr5HaMYU3X37daqpKteft76X8P2UbIDkCHmkLd0ZLtn8IBh7j/DAUOweJRMnjDv5SeKQDiAVyjVIWzozXKIhHX26jv4gSLdunuweG3e8nzDgiwIBDukAUiDkkbZ0ZrhkO9Ux2T2GRxKfPRCxLObJAykQ8khbOsfrZTvVkdIL4CxCHmlL50zTbM9ZTXaPQJL3FyX7DwAkEfLIQE1VuVY0VMYCOzitRCsaKuPKJdkebj32HqEZU7SioVJ1c76a8P2130j8OoALmF2DjFzqeD0nDre++B7RMzCj17vePaqIdeEJvvYbX9XyhZVZ9AYwHyEPx7l1zuryhZWEOpAhyjUAYDBCHgAMRrkG43A4B2AOQh5xOJwDMAvlGsThcA7ALIQ84nA4B2AWQh5xsl2xCiC/UJNHnObairiafFT/mWE9+swuBQIBDQ6dZ0AW8AlCHnHGrli92GdffLnVLwOygD8Q8kg4ZfLpR+bqsQ1dKWvx0QFZQh7IX4R8gUs1ZTKdwVYGZIH8xsBrgUs1ZTKdwVYGZIH8RsgXuFRTJmdXBMdtG3yxTLYQBuANQr7ApXoS79rbp7mzymPv+crkCZo6pTj2ubF7yQPIP9Tk80yu941JNmVSulC26T3Qr6cfmeva/QG4iyf5PBIdBI2WUKKDoD37+1y7Z/QkpmQYWAX8jZDPI17tG1NTVc5KV8BQWYX81q1btWjRItXX1+vFF190qk0Fy8t9Y7I9mxVAfrJdkz9+/Lja29u1efNmTZo0Sffee69uueUWXX/99U62r6AEp5UkDPRcPE07cTYrgPxjO+S7u7t16623avr06ZKkhQsXaseOHfrRj37kWOMKTaJB0Fw+Tbt1NisA79gO+RMnTigUCsWuy8rK1Nvbm/bng8Gpdm8tSQqFSrP6fD66q65U00ona+P29/XpwJCumDFFLQ03qu6mmZLM7HM6CrHf9LlwuN1v2yEfiUQUCARi15ZlxV1fSn//oCIRy9a9Q6FShcNnbX0231VdPV3rHqqJey0cPmt0n1MpxH7T58KRSb+LigK2Ho5tD7yWl5crHA7HrsPhsMrKyux+OQCAC2yH/G233aaenh6dPHlSQ0ND2rlzp+bNm+dk2wAAWbJdrrnyyiu1cuVKtbS0aGRkREuXLtXs2bOdbBsAIEtZbWvQ1NSkpqYmp9qCJHr292nL7h6FB4aY2gggI+xdk+dS7fdO0AO4FLY1yHNebXUAwAyEfJ7zcqsDAP5HyOc5Ng4DkA1CPs/NrgiOe42NwwCki5DPYz37+9S1d/xe8nNnsccMgPQQ8nks0aCrJPUe6PegNQD8iJDPYwy6AsgWIZ/HGHQFkC0WQ7nEiQO5vd5fHoD/EfIucGqV6sWnNZ08M6zL2dIAQIYIeRekWqWaaUBHT2sq1P22AWSHmrwLGDAFkC94kndBugdyO1G3B4BUeJJ3QXNthSYVx//Vjh0wjdbtoz8MonX7nv3jFz8BgF08yach0yfuiwdMk33Gybo9ACRDyF9CJjNlMvlhQN0eQC5QrrmEdPdzz7T8wkInALlAyF9Cuk/cmR7ukU7dHgCyRbkmgYvLLsmMfeLOtPySTt0eALJFyI8xtgafSKIn7nSnTV4sutAJANxCyI+RbHvfqKKAtKKhclw4J9tnZnZFUI9t6OJpHYAnCPkxLjW7JWIpVme/OKwTlV9mVwTVtbcv6z1sAMAuo0PezorSZGWXiyUL67Hll8c2dDEXHoCnjJ1dY3dFaaJZL4mkmjkTxVx4AF4zNuQzndIYVVNVrhUNlbEB06JA8vdeKqyZCw/Aa8aWa7J5ik5Udsl05ozEoR8AvGfsk7yTT9F2Fy6N/a0gOK0k4cwcAHCLsU/yTj5FZ7NwibnwALxkbMg7vaKUsAbgR8aGvEQwA4BRIc9JSwAQz5iQz2TfdwAoFMbMrrE7Lx4ATGZMyLO6FADGMybkWV0KAOMZE/KctAQA49keeO3o6NAf/vAHBYNBSVJdXZ1WrlzpWMMyxUlLADCe7ZDft2+fVq1apcbGRifbkxXmxQNAPNvlmr1796qjo0NNTU36+c9/rtOnTzvZLgCAA2yHfCgU0iOPPKJXX31VV111lZ544gkn2wUAcEDAsiwr1Ru2b9+u3/3ud3Gvff3rX9fzzz8fuz59+rQWLFigt99+25VGAgDsuWTIJ3L27Fm9/PLLeuCBByRJp06dUkNDg3p6etL+Gv39g4pEMr61JCkUKlU4fNbWZ/2qEPssFWa/6XPhyKTfRUUBBYNTM76HrXLNZZddpr/85S/as2ePJOmFF17QggUL7HwpAICLbM2umTBhgp555hn99re/1RdffKFrr71W69evd7pt40Q3IDt5ZliXM0USAC7J9hTKb33rW+ro6HCyLSmxARkAZM43K17ZgAwAMuebkGcDMgDInG/2kw9OK0kY6F+ZPEGPbehiKwMASMA3T/KJNiCbEJCGRyKx8I/W6Xv293nRRADIO74J+Zqqcq1oqFRwWokCuvBkP2Vysc6Pxs+1p04PAF/yTblG+nIDsugCgta2zoTvo04PABf45kk+EQ4KAYDUfB3yHBQCAKn5qlwzFgeFAEBqvg55iYNCACAVX5drAACpEfIAYDBCHgAMRsgDgME8G3gtKgp4+nk/KsQ+S4XZb/pcONLtt92/H1vH/wEA/IFyDQAYjJAHAIMR8gBgMEIeAAxGyAOAwQh5ADAYIQ8ABiPkAcBghDwAGMxXIb9161YtWrRI9fX1evHFF71uTk788Y9/1OLFi7V48WKtX7/e6+bk3Lp167Rq1Sqvm5ETnZ2dam5uVkNDg5588kmvm5Mzr7zySuzf+Lp167xujqsGBwfV2NioI0eOSJK6u7vV1NSk+vp6tbe3u3NTyyf6+vqs+fPnWwMDA9Znn31mNTU1WR999JHXzXJVV1eX9b3vfc8aHh62zp07Z7W0tFg7d+70ulk5093dbd1yyy3WL3/5S6+b4rqPP/7Yuv32261jx45Z586ds5YtW2a9+eabXjfLdZ9//rl18803W/39/dbIyIi1dOlSq6ury+tmueLdd9+1GhsbraqqKuuTTz6xhoaGrNraWuvjjz+2RkZGrNbWVle+5755ku/u7tatt96q6dOn67LLLtPChQu1Y8cOr5vlqlAopFWrVmnSpEmaOHGiKioqdPToUa+blROnTp1Se3u7Hn74Ya+bkhOvv/66Fi1apPLyck2cOFHt7e2qrq72ulmuGx0dVSQS0dDQkM6fP6/z58+rpKTE62a5YtOmTVqzZo3KysokSb29vbrmmms0c+ZMFRcXq6mpyZVM883xfydOnFAoFIpdl5WVqbe318MWue+GG26I/fnQoUPavn27/vGPf3jYotz5zW9+o5UrV+rYsWNeNyUnDh8+rIkTJ+rhhx/WsWPHVFdXp5/+9KdeN8t1U6dO1U9+8hM1NDRoypQpuvnmm/XNb37T62a54qmnnoq7TpRpx48fd/y+vnmSj0QiCgS+3GrTsqy4a5N99NFHam1t1S9+8Qtde+21XjfHdf/85z911VVXqaamxuum5Mzo6Kh6enq0du1avfTSS+rt7VVHR4fXzXLdBx98oJdffllvvPGG3nrrLRUVFem5557zulk5katM803Il5eXKxwOx67D4XDs1x6TvfPOO3rggQf0s5/9TN/5zne8bk5OvPbaa+rq6tKSJUv07LPPqrOzU2vXrvW6Wa664oorVFNTo8svv1yTJ0/Wt7/9beN/U5Wk3bt3q6amRsFgUJMmTVJzc7Pefvttr5uVE7nKNN+E/G233aaenh6dPHlSQ0ND2rlzp+bNm+d1s1x17Ngx/fCHP9Tvf/97LV682Ovm5Mzf/vY3bdu2Ta+88op+/OMf64477tDq1au9bpar5s+fr927d+vMmTMaHR3VW2+9paqqKq+b5brKykp1d3fr888/l2VZ6uzs1KxZs7xuVk5UV1fr4MGDOnz4sEZHR7Vt2zZXMs03Nfkrr7xSK1euVEtLi0ZGRrR06VLNnj3b62a56rnnntPw8LDa2tpir917771atmyZh62CG6qrq/WDH/xA9913n0ZGRjR37lx997vf9bpZrrv99tv13nvvqbm5WRMnTtSsWbP04IMPet2snCgpKVFbW5seffRRDQ8Pq7a2Vnfeeafj9+FkKAAwmG/KNQCAzBHyAGAwQh4ADEbIA4DBCHkAMBghDwAGI+QBwGCEPAAY7P8BWkT/h+mBjXsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "x = 10 * rng.rand(50)\n",
    "y = 2 * x - 5 + rng.randn(50)\n",
    "plt.scatter(x, y);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We can use Scikit-Learn's ``LinearRegression`` estimator to fit this data and construct the best-fit line:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.656953Z",
     "start_time": "2019-06-20T03:53:19.487466Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "model = LinearRegression(fit_intercept=True)\n",
    "\n",
    "model.fit(x[:, np.newaxis], y)\n",
    "\n",
    "xfit = np.linspace(0, 10, 1000)\n",
    "ytest = 2*xfit -5\n",
    "yfit = model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The slope and intercept of the data are contained in the model's fit parameters, which in Scikit-Learn are always marked by a trailing underscore.\n",
    "Here the relevant parameters are ``coef_`` and ``intercept_``:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.663238Z",
     "start_time": "2019-06-20T03:53:19.659355Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model slope:     2.027208810360695\n",
      "Model intercept: -4.998577085553202\n"
     ]
    }
   ],
   "source": [
    "print(\"Model slope:    \", model.coef_[0])\n",
    "print(\"Model intercept:\", model.intercept_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We see that the results are very close to the inputs, as we might hope."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "**Model evaluation for regression**\n",
    "\n",
    "- RMSE\n",
    "- R Square\n",
    "\n",
    "https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.670737Z",
     "start_time": "2019-06-20T03:53:19.665840Z"
    },
    "code_folding": [],
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "# Root mean square error 均方根误差,亦称标准误差\n",
    "# https://en.wikipedia.org/wiki/Root-mean-square_deviation\n",
    "def rmse(y_test, y_pred): \n",
    "    mse = np.mean((y_test - y_pred) ** 2)\n",
    "    return mse ** 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.679176Z",
     "start_time": "2019-06-20T03:53:19.673768Z"
    },
    "code_folding": [],
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "# R square\n",
    "def R2(y_test, y_pred): \n",
    "    residuals_sum_of_squares = np.sum((y_pred - y_test)**2)\n",
    "    total_sum_of_squares = np.sum((y_test - np.mean(y_test))**2)\n",
    "    return 1 - residuals_sum_of_squares/total_sum_of_squares\n",
    "# https://en.wikipedia.org/wiki/Coefficient_of_determination"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.685867Z",
     "start_time": "2019-06-20T03:53:19.681780Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE: 0.1584\n",
      "R2 score: 0.9992\n"
     ]
    }
   ],
   "source": [
    "print('RMSE: %.4f' % rmse(ytest, yfit))\n",
    "print('R2 score: %.4f' % R2(ytest, yfit))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.691476Z",
     "start_time": "2019-06-20T03:53:19.688471Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import mean_squared_error, r2_score, explained_variance_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.700612Z",
     "start_time": "2019-06-20T03:53:19.693834Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE: 0.1584\n",
      "R2 score: 0.9992\n",
      "Variance score: 0.9998\n"
     ]
    }
   ],
   "source": [
    "print('RMSE: %.4f' % mean_squared_error(ytest, yfit) ** 0.5)\n",
    "print('R2 score: %.4f' % r2_score(ytest, yfit))\n",
    "print('Variance score: %.4f' % explained_variance_score(ytest, yfit))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "The ``LinearRegression`` estimator is much more capable than this, however—in addition to simple straight-line fits, it can also handle multidimensional linear models of the form\n",
    "$$\n",
    "y = a_0 + a_1 x_1 + a_2 x_2 + \\cdots\n",
    "$$\n",
    "where there are multiple $x$ values.\n",
    "Geometrically, this is akin to fitting a plane to points in three dimensions, or fitting a hyper-plane to points in higher dimensions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "**Building some example data using NumPy**\n",
    "\n",
    "The <font color = 'red'>multidimensional nature of such regressions</font> makes them more difficult to visualize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.732376Z",
     "start_time": "2019-06-20T03:53:19.727527Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "X = 10 * rng.rand(100, 3)\n",
    "y = 0.5 + np.dot(X, [1.5, -2., 1.])\n",
    "# $y$ is constructed from three random $x$ values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "we can use the single ``LinearRegression`` estimator to fit lines, planes, or hyperplanes to our data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.772901Z",
     "start_time": "2019-06-20T03:53:19.766641Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5000000000000144\n",
      "[ 1.5 -2.   1. ]\n"
     ]
    }
   ],
   "source": [
    "model.fit(X, y)\n",
    "print(model.intercept_)\n",
    "print(model.coef_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Basis Function Regression 基函数回归\n",
    "\n",
    "One trick you can use to adapt linear regression to nonlinear relationships between variables\n",
    "- to transform the data according to *basis functions*.\n",
    "\n",
    "We have seen one version of this before, in the ``PolynomialRegression`` pipeline used in [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) and [Feature Engineering](05.04-Feature-Engineering.ipynb).\n",
    "\n",
    "The idea is to take our multidimensional linear model:\n",
    "$$\n",
    "y = a_0 + a_1 x_1 + a_2 x_2 + a_3 x_3 + \\cdots\n",
    "$$\n",
    "and build the $x_1, x_2, x_3,$ and so on, from our single-dimensional input $x$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "That is, we let $x_n = f_n(x)$, where $f_n()$ is some function that transforms our data.\n",
    "\n",
    "For example, if $f_n(x) = x^n$, our model becomes a polynomial regression:\n",
    "$$\n",
    "y = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \\cdots\n",
    "$$\n",
    "\n",
    "Notice that this is *still a linear model*\n",
    "- the linearity refers to the fact that the coefficients $a_n$ never multiply or divide each other.\n",
    "- What we have effectively done is taken our one-dimensional $x$ values and projected them into a higher dimension, so that a linear fit can fit more complicated relationships between $x$ and $y$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Polynomial basis functions 多项式基函数\n",
    "\n",
    "> polynomial, Synonym: multinomial, 多项式\n",
    "\n",
    "This polynomial projection is useful enough that it is built into Scikit-Learn, using the ``PolynomialFeatures`` transformer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.892297Z",
     "start_time": "2019-06-20T03:53:19.883041Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.,  4.,  8.],\n",
       "       [ 3.,  9., 27.],\n",
       "       [ 4., 16., 64.]])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "x = np.array([2, 3, 4])\n",
    "poly = PolynomialFeatures(3, include_bias=False)\n",
    "poly.fit_transform(x[:, None])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We see here that the transformer has converted our one-dimensional array into a three-dimensional array by taking the exponent of each value.\n",
    "- This new, higher-dimensional data representation can then be plugged into a linear regression.\n",
    "- As we saw in [Feature Engineering](05.04-Feature-Engineering.ipynb), the cleanest way to accomplish this is to use a pipeline.\n",
    "\n",
    "Let's make a 7th-degree polynomial model in this way:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:19.952201Z",
     "start_time": "2019-06-20T03:53:19.948188Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.pipeline import make_pipeline\n",
    "poly_model = make_pipeline(PolynomialFeatures(7),\n",
    "                           LinearRegression())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "With this transform in place, we can use the linear model to fit much more complicated relationships between $x$ and $y$. \n",
    "\n",
    "For example, here is a sine wave with noise:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Our linear model, through the use of 7th-order polynomial basis functions, can provide an excellent fit to this non-linear data!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:20.187595Z",
     "start_time": "2019-06-20T03:53:20.018931Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "x = 10 * rng.rand(50)\n",
    "y = np.sin(x) + 0.1 * rng.randn(50)\n",
    "xfit = np.linspace(0, 10, 1000)\n",
    "\n",
    "poly_model.fit(x[:, np.newaxis], y)\n",
    "yfit = poly_model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Gaussian basis functions 高斯基函数\n",
    "\n",
    "Of course, other basis functions are possible.\n",
    "For example, one useful pattern is to fit a model that is not a sum of polynomial bases, but a sum of Gaussian bases.\n",
    "The result might look something like the following figure:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "\n",
    "<img src = \"img/figures/05.06-gaussian-basis.png\" width = \"400px\">\n",
    "\n",
    "<center>[figure source in Appendix](#Gaussian-Basis)</center>\n",
    "\n",
    "<font size = '4pt'>The shaded regions in the plot are the scaled basis functions, and when added together they reproduce the smooth curve through the data.</font>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "\n",
    "These Gaussian basis functions are not built into Scikit-Learn, \n",
    "- but we can write a custom transformer that will create them\n",
    "- Scikit-Learn transformers are implemented as Python classes; \n",
    "    - reading Scikit-Learn's source is a good way to see how they can be created:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The simplest case of a normal distribution is known as the ''standard normal distribution''.\n",
    "\n",
    "$$\n",
    "f(x \\mid \\mu, \\sigma^2) = \\frac{1}{\\sqrt{2\\pi\\sigma^2} } e^{ -\\frac{(x-\\mu)^2}{2\\sigma^2} } \\sim  e^{ -0.5 (\\frac{x-\\mu}{\\sigma})^2}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:20.216483Z",
     "start_time": "2019-06-20T03:53:20.190224Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.base import BaseEstimator, TransformerMixin\n",
    "\n",
    "class GaussianFeatures(BaseEstimator, TransformerMixin):\n",
    "    \"\"\"Uniformly spaced Gaussian features for one-dimensional input\"\"\"\n",
    "    def __init__(self, N, sigma_factor=2.0):\n",
    "        self.N = N\n",
    "        self.sigma_factor = sigma_factor\n",
    "    \n",
    "    @staticmethod\n",
    "    def _gauss_basis(x, mu, sigma, axis=None):\n",
    "        arg = (x - mu) / sigma\n",
    "        return np.exp(-0.5 * np.sum(arg ** 2, axis))\n",
    "        \n",
    "    def fit(self, X, y=None):\n",
    "        # create N centers spread along the data range\n",
    "        self.mu_ = np.linspace(X.min(), X.max(), self.N)\n",
    "        self.sigma_ = self.sigma_factor * (self.mu_[1] - self.mu_[0])\n",
    "        return self\n",
    "        \n",
    "    def transform(self, X):\n",
    "        return self._gauss_basis(X[:, :, np.newaxis], self.mu_,\n",
    "                                 self.sigma_, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:20.445513Z",
     "start_time": "2019-06-20T03:53:20.219009Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEBCAYAAAB13qL/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzt3XlgVPW5N/DvmTX7PpPJSiBkJ2whQNgCKoRAIhhtC/aKlVt77WbL20tr9b761lurtlq7WLtYqtZSKypKUUBUFoFEgbCFkAUSsk+SySQhmUky63n/CAkJmYHJZGbOOTPP5y9mPU8OM/Oc3/b8GJZlWRBCCPFZIq4DIIQQwi1KBIQQ4uMoERBCiI+jREAIIT6OEgEhhPg4SgSEEOLjKBEQQoiPo0RACCE+jhIBIYT4OEoEhBDi4ygREEKIj6NEQAghPo4SASGE+DgJ1wHcSk+PHlYrFUeNjAyCVqvjOgxeoHNxA52LG+hcDBOJGISHB076dbxOBFYrS4ngOjoPN9C5uIHOxQ10LpxHXUOEEOLjKBEQQoiPo0RACCE+jhIBIYT4OEoEhBDi43g9a8jXlFW2Y/fROmj7DIgMkaMkPxl5WSquwyKEeDlqEfBEWWU73thfDW2fAQCg7TPgjf3VKKts5zgyQoi3o0TAE7uP1sFoto67z2i2YvfROo4iIoT4CkoEPDHSEnD0fkIIcRVKBDwRGSKf1P2EEOIqlAh4oiQ/GTLJ+P8OmUSEkvxkjiIihPgKmjXEEyOzg2jWECHE0ygR8Ehelop++AkhHkddQ4QQ4uMoERBCiI+jriEXopXBhDiOvi/8MeUWgU6nQ1FREVpaWiY8VlVVhZKSEhQUFOCJJ56A2Wye6uF4i1YGE+I4+r7wy5QSwfnz57F582Y0NDTYfHz79u148skn8fHHH4NlWezatWsqh+M1WhlMiOPo+8IvU0oEu3btwlNPPQWlUjnhsdbWVgwNDWHu3LkAgJKSEhw4cGAqh+M1WhlMiOPo+8IvUxojeOaZZ+w+1tnZCYVCMXpboVCgo6NjKofjtcgQuc0P8diVwUaTBZUN3ahv60N3nwEsyyIkUIYZsSGYNT0CAX5ST4ZMCGcc+b4Qz3HbYLHVagXDMKO3WZYdd9sRkZFBrg7Lbb5RlIWX3zkPg8kyep9cKsY3irIgkknwzmeXcaS8GfohMyRiBhEhfhCLRND2DeHgqWbIJCLkz4/H/QXpiArzn/D+CkWwJ/8cXqNzcYNQz8Wtvi/O/k1CPRd84LZEoFKpoNFoRm93dXXZ7EK6Fa1WB6uVdXVobpGVGIYta9PGzYLYsHwGLjd243e7zsFqZbEwQ4ml2TFIiQ+FVCIGAFisVjSo+3GiQo3D5c04eqYFX7szBSvnxo4mToUiGBpNP5d/Hm/QubhByOfC1velJD8ZWYlhTv1NQj4XriQSMU5dQLstEcTFxUEul6O8vBw5OTnYs2cPVqxY4a7DccbeFLhWjQ6v7r2Epk4dFmYocW9+MhQ2rvTFIhGS40KRHBeKdYun4Y2Pa/DmxzWoaujGN4syIZOKOfirCHE/WknPHy5PBA8//DAeffRRZGdn44UXXsD//M//QKfTISsrC1u2bHH14Tg1MgVuZPbDyBS4xvZ+HD3XBrlUhO+VZGN+quI27zQsKswf2746Bx9/2YR3j9ShT38Oj943251/AiGEgGFZlrd9L3zvGtr+ygm7sxySVMH4/r2zER7s3ODXyaoOvLr3EpJUwXjue8vR3zc4lVC9BnUB3EDn4gY6F8N41zXkC2411e0nX58PuZ1uHUdWVC7MiIZELMIf3q/As2+cwiN3Z0IipoogxPtYWRbNHTpoegchFjNIUAYhKnRiNypxH0oEU2BvClxEsOyWScBWdxKACclgfqoCD65Nx+v7q/H2IRm+vjrVxX8BIdwxW6w4fLYVB75sQk//+O9RvCIQBQsTkZelgkg0udmGZPIoEUxBSX4yXt9XBZPlRveVTCLCvStn2n3NrVZU2ho4WzEnFhVXu/FZeQs+K2+hmizEK3T2DOBPeyrR0N4PiXj4hz40UIqV8+IRIJfg2IU27PioCofPtuKhdRmIiwrkOGLvRonABkeLYQX7S8EwDBiGBcti3HPtvcdkVlSWVbbjrU9roRs0j3uevRYEIULQ1NGPF98+B6PJAomIgfn6hdQ1vQn7v2jEg4Xp+NnWhfjyUgf++ell/PyN09i6PgO56ZObfk4cR4ngJo503bAsi49PNuOdI1cQFxWER+/NHrcI7Fbv4eiKypvfY6xbtSAI4TO1Vo9fvXUWMqkYYgbo1ZvGPT72s704S4W0xHD88YOL+OMHF9GxYgbW502bsDC1rLIdHxwvg6ZnkFrMTqLRx5vcrhjWwJAZf9l7CbsOX0FOqgJPPJAzYSXwrd7D0b2Jbb3HWFSThQhN34ARv3nnPEQiBj+5f96EJDBi7Gc7PFiOH98/D3lZ0dj9eT3+9dkVWMdMdBy5YNL0DI6+lqqYTh61CG5yq66byy29eHXvJXT3GXDPihkosnF1crv3cHRv4tv90IcGUl0iIhwsy+Iv/65Er86IH2+eB2V4gMOtY4lYhP8sykSQvwyfnG6GbtCIh9ZlQCIWTXrMjdhGieAm9j6ccqkIz/3jDCJD/fDYf8zHzLjQSb/HyAfckRWV9t5jhFQihtXK0owKIghHzrbiUkMPHihIQ/L1705JfvKE7k9brWMAEDEMNt05E0EBUrz/eT0GDRZ8e2MWVTF1EeoauomtrhsAMJisyJoegZ9tXXjLJGDvPex9wCcbR6CfGKvmx6Hr2hCOnmt1+P0I4Upn7yB2Ha5DZlI4Vs6NHb0/L0uFBwvTRy+QIkPkeLAw3e5FEsMwKF6ShK+vTsW5K134zTsXEBEss/lcqmI6OdQiGGNkpo+9vvna5l6cu9J126t5R7t/HH2P7j4DIsa8B8uyaNcO4N2j9ZifpkRooO0vAyFcs7IsXvuoCiIR8FBhxoSuVGfqDd2ZEw9/uRh/+6gaUaF+kIqZCVO4J3PRRajExKiyyvYJawJsiQyR41ffWeqRmEbYWj6v1urx5I6TyMtSYev6DI/GwyUqJXCDEM7FJ6eb8danl/FQYTqWz4m9/Qsm4UytBn/acxHBATIwIqD7Gu19TCUmpuCazoC/H6i+bRIA+NP3GBMZiLsWxOPgyWaszk1AglI4ezcQ39DRPYD3jtRhdnIkls2Ocdn7jl2jExIghW7AhAB/CbZvnoeMaeEuO44v8ekxApZlcaJCjR//qQwGk/2pmmPxqe9xfV4S/OUSvHPkCtehEDKO1cpix74qSMQiPLg2fdKbUtlz86b3fQMmACzEIgYv/usc3j1SB+OYzW6IY3w2EVitLP7xSS12fFQF8y3m64/Ft77HIH8pipYk4WJ9NyoburkOh5BRB08140rLNdy/OsXpCry22BrDM1lYMCIGS2apsO+LRjy54yROVnXwunIx3/hk15CVZbHjo0soq+yAn0yMIaPtKwgxA/j7SaAbNPO27/HOnHgcOtOCdw5dQcZDuRC56MqLkLEcLbsCDI9f7f68HvNSolz+fbHXNdvdO4Stj2QgLysa//ikFn/aUwllWD0WZ0UjN12J2KhAl7VKvJFPJoIPjtWjrLID9yyfjvePXbX7vK1Fmbz74b+ZVCLCxuXT8dcPq3C2VoOcNKrHQlxrMhVzLVYr/vphFeRSEbYUpLn8x9fe+pqo8OHV/RlJEfjfby5CeY0Gh8+0YO+JBvz7RAOC/KVIjg1BUkwIpkUHY5oqGGFBMkoO1/lcIjh3pQsfljZixZxYFC1Jwufn2+wu/uJ7EhixKDMae0sbsef4VcxLVVCrgLjUZFbv7vuiCVfVffivu7MQGuT68TR7i9C2FN6YOSdiGOSmK5GbrkRPvwEV9Vpcab2GutZrOF+nHX0ewwBxUYFYlBmNxZkqRIb6uTxeofCpMQL9kAlvHKhGvCIQ/7EmFQzDuGTxF9fEIhHuXpqEFo0eZ2o0XIdDvIyjq3evqvvw7+NXsTBDiYUZ7mmZ2luEtjInwebzw4PlWDEnFlvXZaBoSRKk4hsXSSwLtGr0eO9oPbb/sRSvfHARaq3eLXHznU+1CHYfrUe/3oQf3jdndLcvVyz+4oNFGdHYe6IBe05cxfw0ahUQ13GkJpDBZMGrey8hJFCGB9zQJTSWs5ve7z5aN2GKOAsgLEiGpdkx+PR0C87WanD30iSsy5sGsejGBeJkxkiEyGcSQUf3AI6ea8PKebGYpgoe95izHyw+EYkY3L00CX/ZewnlNRqq3U5uqbtvCPohMyJC5Aj0u3UBw5L8ZLy2r2p034ARQ0YzyirbsTgzGn8/UI327gH896a5CPST8vKH017LpldnxL35yVidm4B/flKL949dRV1bHx7ZkAU/mWRSYyRC5TOJ4P1j9ZBKRCheOp3rUNxmYUY0/n2iAR+VNmBBmoIGwsgE5y534b2jdWjtutEFMjMuFCvnxWJxpv1tIVkbUzH1Qxa8sb8aF+q0+PLS8OSLzKQI3v5w3q5lExIgwyMbZiEtsRX/OFiDF/91Dj/aNNcnKpz6xBhBZ+8gTlV14s6ceK+uyyMSMShclIimTh2tKyDjsCyLPcev4nfvXQALYPOdKfjOxlnYuHw69EMm/PXDKjz5t5M4d6ULN1ed2X20DvYW3RvNVnx5qQM5aQoULUkaff6t9vTgiqPjgavmxeE7G2ehXt2Hl3dX+ESFU59oEXx2ugUiEYM7c+K5DsXtFmep8P6xeuz/ogmzpkdyHQ7hiSNnW7Hn+FUszVbhwbXpo2NkAFC8JAnlNRq893k9fvfuBWQlheNrd6YgXjFctsSRH7xvFmWOtkD5+sM5mfHAnDQlHirMwN/2Vdl9P2+qAO/1iWDQYMaxC23IzVC6dIUjX0klIqzOTcA7h+twVd2H6TEhXIdEONai0eGfn17G7ORIPLQuY8JEAoZhsCBdibkpUTh8phX/PnEVT/3tJPLnxGLDsum33RsjIlgGuVQ8etvRDWe4MJnxwGWzY9DU0Y9Py1tsPu5NC5e9vmvoVHUnhowW3Dnf+1sDI1bOjYO/XIz9XzZxHQrhGMuy+MfHNfCXS/Cf6ycmgbEk4uGLiGf/Kw93zI/H5+fV+NEfSuEnl9i9+hWLgHtXzhx3nzdMyR7x1TtmQiK2/cfzIbG5itcngtKL7YiOCMCMWN+5MvaXS7ByXhzKazrR0TPAdTiEQ+cud6G25RpK8mcgOMCx8bEgfym+vjoVzzy8CAWLEgB2eJqlTTYemOyGM3wmEYtwz4oZE+4XamKzx6u7hrp6B1Hb3It7VszwuRk0qxck4JNTzfj4ZDO2FKRxHQ7hAMuy+HdpA5Rh/ljuRBno6IgAfGXlTHxl5UxYrSx+/McT6O43jnuOhYXN2TPeMCV7ROGiaWhQ9+NUdScA8GY6rCt5dYvgi0sdAIC8zGiOI/G8sCA5FmeqUHpRDf2QietwCAdqm3vR2N4/YXGUM0QiZkISGMH1ILAnPFycidioQCjD/fHsf+V5VRIAvDwRlNdqkBwbgqgwf65D4cRdC+JhNFlx7Lya61AIB46ea0OAXILFk7wQKqtsx/ZXTmDrc4ew/ZUTKKtsB2C/T9yb+srtkYhF+OqqmejsGcShM963V7jXJoLuviE0tvdjbkoU16FwJjE6GGkJYfisvAUWq2N7LhDvoBs04XSNBnlZKsjGzOi5nZs3fhlZDFZW2e5Vg8DOyJ4RgazpEdh74ioGvKyV7bWJ4NyVLgDA/FQFx5Fw664F8dD2DeHc5S6uQyEeVFbZDrPFiuVzJjc2cLtVtN4yCOwMhmHwlZXJ0A+Z8clp21NKhcprB4vPXu5CdEQAYiIDuQ6FU/NSFIgM8cOnp1torwIfcqq6E/GKICRGB9/+yWPcbjGYNw0COyMxOhjzUqLwyalmrF6QgAA/7/gJ9coWgcFkQU1TD+Yk08rakRXVNc29aOro5zoc4gG9OgPqWq5hQdrkW8O+PA7gqLuXTseAwYzPypu5DsVlvDIRXGm5BrOFRdb0CK5D4YXlc2Igk4rwqZc1Z4ltZ2s1YAHMdyIR+Po4gCOmqYIxJzkSB081Y9Bg5jocl/COds1NLjV0QyxikBofxnUovBDoJ8WSWTE4fkGN+1YlI8TBhUVEmMprNYiOCEBc1OS7Rb1lfw53K1qahGf+Xo5/HKxBbXOv4M+VlyaCHsyMC4Vc5vhsCW93V048jpxtxbHzbVifl8R1OMRNhoxm1DT1YnVugtOLKH19HMAWW/srKMP9UVbZMfocvpTbdobXdQ31DxjR1NGPzKRwrkPhldioQKQnhuHouTZYvalaFhmnpqkXFiuLWdQt6jL2ptT26ScOrPOh3LYzvC4RVDf1ggWQmURfhJutnBeHrmtDuHhVe/snE0GqvNoNmUSElPhQrkPxGvam1A4Zba/NEeJK6yklgr1792LdunVYs2YNdu7cOeHxl19+GatWrcKGDRuwYcMGm89xtarGHvjJxEiKmdy0OV8wP1WB0EAZDnvhykgyrLKhG6mJYZBKqFvUVSb7wy7EGVZOjxF0dHTgpZdewu7duyGTybBp0yYsWrQIM2feKEl78eJF/PrXv8a8efNcEqwjrrT0IjkudMq1VbyRRCzC8jmx+Ki0AV3XBhEV6pulN7xVd98Q1NoB5M+J5ToUr2Jvf4VAPzGMJitMY7ZvE+oMK6d/LUtLS7F48WKEhYUhICAABQUFOHDgwLjnXLx4EX/+859RXFyMp59+GgaDe5tMA0MmtGr0SImjZrE9K+fGAsxwHRriXWqaewEA6dNofMyV7E2pvX91Gr6xLgNy6fBj4cEywa60djoRdHZ2QqG4MU9ZqVSio+PGCLper0dGRga2b9+O999/H319fXjllVemFu1t1LX1gQUwk/pH7YoI8cOc5CgcO98Gs4XqD3mTyy3X4C8Xj24xSVzjVqU18rJUeOzrOQCGy1ULMQkAU+gaslqt46ansSw77nZgYCBeffXV0dtbt27F448/jm3btjl8jMhIxz/QR8qb8ed/VwIAXj9QjQfXZWJlToLDr+c7hcJ1Yx4bV83E/3v1C1xR67B8XpzL3tdTXHkuhG7subiq7kPG9EhER/vOJkxjufNzcffKYNy9MsXucVMSwnCsoh2b1mYIcu8TpxOBSqXC6dOnR29rNBoolTdq2bS1taG0tBT33XcfgOFEIZFM7nBarc6hqY4j07tGRva7eofw+13n0Nc/JNgMPZZCEQyNxnXlIeIj/KEI88Oeo1eQHi+sHw1XnwshG3sudIMmNLb3Y36qwifPD9efi6WzVHh9fzVKz7YgNYG7hawiETOpC+jR1zl7wCVLlqCsrAzd3d0YHBzEwYMHsWLFitHH/fz88Ktf/QrNzc1gWRY7d+7E6tWrnT3cLd2qYiKZSMQwWDk3DjXNvWjt0nMdDnGBK63XAACp1C3KiUUZ0fCXi3H0nDBn5DmdCKKjo7Ft2zZs2bIFGzduRFFREWbPno2HH34YFRUViIiIwNNPP41vf/vbWLt2LViWxUMPPeTK2EfdrmIimWjp7BhIxAyOnBXmB5eMd7mlF2IRg+kxwmrheQu5TIy8LBVOVWugGxTeXgVTKjFRXFyM4uLicfeNHRcoKChAQUHBVA7hEHvTu4Q4n9dTQgJkWJCuROlFNe7LT6ZyHAJ3ueUakmKCJ7UJDXGtlXPjcOhMK0or1FizMJHrcCbFKybbl+QnQ3TT+IxQ5/N60qp5cRg0WPBlVcftn0x4y2yxorG9H8mx1C3EpXhlEKbHhOBYhRosK6wyLl6RCPKyVIgM9YNEPJwNfG3nJGfNjAtFvCIQh8+0Cu6DS25o69LDZLZStxAPLJsdg1aNHo0C2/vDK6qPmi1W9PQbcWdOPL52h+0pXmQihmGwal4c3jxYi6vqfsyIpR8SIbqq7gMAKqvCAwszlHjr08s4caEdSSrhfJ+8okWg1g7AbLFi2iS35SPA4iwV5DIxDp+lTWuEqqG9HwFyCZRhVDKEa4F+UsxPjcIXl9phMgtnwaZXJILG9uFm2DQVJYLJ8pdLkJelwsmqTkHOdiDDLYKkmGBBLmTyRsuyY6AfMuP8lS6uQ3GYVySCpo5+yKViRIcHcB2KIK2cGwuT2YrH/lSKrc8dwvZXTqCssp3rsIgDTGYLWjV6Gh/gkcykCIQHy3G8Qs11KA7zikTQ2NGPhOggiG6eOkQc0tqlBwNgwGABcGPjDUoG/NfUqYPFyiKJWsO88WVVB4YMZlyo0+JHLx8XxPdI8InAyrJo6tDR+MAU7D5ah5vnDNHKbGFoUA93i1KLgB9Gyt0MGocvqnp0RkFcVAk+EXR0D8BgslAimAJamS1cje39CA6QIjyYFk/ygVDL3Qg+EYzM16WBYufZW4FNK7P5r7lThwRlEA0U84RQL6oEnwia2nWQiEWIiaSBYmfZ23iDVmbzm8ViRWuXHglK2n+AL4R6USX4RNDY0Y8EZSAkYsH/KZy5eeMNEQM8UJBGK7N5rkWjg9lipUTAI7YuqgBgw/IZHETjOMGuLC6rbMd7R66gu98IuVSEssp2+uGagpHdls7UavDy7goEyAX70fAZV9uGVxQnKKlblC9GfoN2H62Dts+AYH8J+gfNCPKTchzZrQny237zRjQGkxVv7K8GAEoGUzRnZiTCg+U4fLYVQybL6Ac6MkSOkvxkOr880tB2DWIRQ92iPDNyUQUMl7/5Py+fwBeX2jE3JYrjyOwTZH+KUEfmhUAsEmHFnFhcvNqN1/dVjQ5y0doC/rmq7kNsFHWL8plELEJuhhJnL3dh0GDmOhy7BPkJEurIvFCsmBMLADBZxq8uoGTLLw1t12h8QADyslQwma0or9FwHYpdgkwEQh2ZF4pbzUmnZMsPfQNGdPcZKBEIQHJsCBRhfvjiEn9b04JMBCX5yZCKx8+bpumOrlNW2Q57s9Ip2fJDc6cOACgRCADDMFicqUJVQw96+vl5ISXIRJCXpcJXVs0cvU0b0bjOyEC8rW1qKNnyR3MHJQIhWZwVDRbAl5f4uRugIGcNAUBU6HDt9Z/+x3ykxIdxHI33sDUQDwyvLaBkyx+tGh0iQuQIDpBxHQpxQExkIKbHBOOLS+1Yu4h/+xkLskUADC8kY0BXRK5mbwzAytLUXD5p0+qRGE2F5oRkcaYKTR06tGp0XIcygXATQXs/VJEB8JMJtlHDS/bGACKC6cqTL6wsi7auASRQfS1BWZgZDRHD4Asedg8JNxF09FPFUTewt0Q+MymSg2iILd19QzCYLEikz7+ghAbKkDk9HF9UdoBlbY3CcUeQiaBPb0RPv4G+CG5wc92hiGAZIkP80NjRz7sPr69q69IDABLo8y84izKioe0bQr26j+tQxhFkv0oTlZ52q7FL5AHg6LlWvHGgBnWtfZgZH8phZAQY3lEOGP78D+r5OR2R2DYvJQoSMYNTVZ1IjuXPd0mQLYLRPQiiaaDYExZnquAvl+DQ2RauQyEYbhGEBskQRDOGBCfAT4pZ0yNxuqYTVh61sAXZImhs74cizA8BPK/o5y3kMjGWZqtw5GwrNt2RgpBAGcoq26kgHUfauvSIjQzkOgzipNx0Jc5d6UI9j1rYgm0R0ECxZ62aFwezhcXn59tGF51RQTrPY6/PGIqLokQgVHNToiARi3Cymj+zhwSXCPRDJmh6h2h8wMMa2vshFTPY/Xk9/rr3ElV/5Yj2+oyhWEoEguUvlyB7RgROV/One0hwiaChfXh8IElFi2k8ZaQFMFKN1N5HlwrSuV9b1wAAUCIQuNwMJXp1RlxpucZ1KAAEmAga22nGkKfZKztxMypI534jU0cpEQjbnOQoSCUinKrq5DoUAAJMBA3qPijC/BDkTwPFnuLIlT4VpPOM1i4dQgNl9PkXOH+5BLOTr88esnLfPSS8RNDeT91CHmbvSl/E3HicCtJ5RlvXALUGvERuuhLX9EZcbunlOhRhTR/tHzCi69oQVs2P4zoUn1KSnzxuj+gRW9amj+5mRtyPZVm0afVYlh3DdSjEBbJnREIiFuHs5S6kJYZzGougWgSNNFDMiZvLToQEULcEF7r7DDAYLTR11Ev4yyXITArHmVoN5+VbBNUiGJkxRGsIPG9s2QmWZfHU307hUHkLls+OAcPY28+MuFIrDRR7nfmpClyo06K5U8dp7TRBtQhO13RCJGLwvd98ju2vnKAFTBxhGAZ35MShqVOHujZ+Fc/yZjRjyPvMmRkFBsDZy12cxiGYRFB6UY2mDt3oCDutZuVWXqYK/nIxDp2h+kOe0talR0iAlGYMeZHQQBlmxofibK2G0zimlAj27t2LdevWYc2aNdi5c+eEx6uqqlBSUoKCggI88cQTMJvNTh/rncNXJtxHq1m5I5eJsXRWDE5Xd6JPb+Q6HJ+g1uqpNeCF5qUo0NSpg6Z3kLMYnE4EHR0deOmll/DPf/4TH3zwAd5++21cuTL+x3r79u148skn8fHHH4NlWezatcvpQK/pTTbvp9Ws3Fk1f7j+0LELbVyH4vWGZwwNIIaKzXmdealRALjtHnI6EZSWlmLx4sUICwtDQEAACgoKcODAgdHHW1tbMTQ0hLlz5wIASkpKxj0+WXKp7VBpNavnlVW2Y/srJ/DEq19CKmbw8clmXiyK8WbX9EYMGsyIiQzgOhTiYtHhAYhTBHLaPeR0Iujs7IRCoRi9rVQq0dHRYfdxhUIx7vHJkknFuHlyCq1m9bybK4+aLCx0gya8baPrjriO+vpAcQx1DXmleSkK1Lb0on+Am25Wp6ePWq3WcdMGWZYdd/t2jzsiMnJ445m2Lh36B0xYlROPi/VadPUMIircH1sKM7AyJ8HZP0FQFAp+TJn94HiZzbpDR8624tFN8z0SA1/OhSedrBm+WsxOVSIy1H/0fl88F/YI+VzcsTARH5Y2oEEzgDsWeH5/cKcTgUqlwunTp0dvazQaKJXKcY9rNDeaOl1dXeMed4RWOzxL6OjpZgDAmgXxeGB16rjnaDT9zoQvKApFMG/+Tk2P7QEtk9mKipoOqCLc23XBp3PhSbWN3fCTiWExmKDRDE+68NVzYYvQz0WIXIyQQBlOnGtB9rQwp99HJGJGL6An9TpnD7hofL9pAAAWu0lEQVRkyRKUlZWhu7sbg4ODOHjwIFasWDH6eFxcHORyOcrLywEAe/bsGff4ZFTUdyM63B/R4dQ/yrVbjckcPtPqwUh8i/r6QDEt3vNOIobB7BmRuFjfDYv19pV+XX58Z18YHR2Nbdu2YcuWLdi4cSOKioowe/ZsPPzww6ioqAAAvPDCC3j22Wexdu1aDAwMYMuWLZM6xrNvluPouVZUNfYgO9nzzSUyUUl+MmSS8R8bmUSE5LgQHK9Qw2C0cBSZd1Nr9YilgWKvNjs5EgMGM+paPb9Ic0olJoqLi1FcXDzuvldffXX03+np6Xj33Xedfv8enQH/OFgLi5XFosxop9+HuM5ImYmb9yuODPHDczvP4MuqDipE52IDQ2b06ow0UOzlMpMiIBYxuFCnRWqC891DzuB9rSGLlYVYxGBGDBWa44uxdYdGsCyLeEUQ1R9yA3X39RlDbh5/IdwK8JMgJT4UF+q6cN9Kz86GFESJCYt18jOOiGcxDIM75lP9IXdQX9+ekloE3i87ORItGj26+4Y8elxBJIKIYBnXIRAHLM6KpvpDbqDW6iERM1CE+XEdCnGz2cnDq4yf+ttJbH3ukMeKa/I+EUjFDO5dOZPrMIgD/GQSqj/kBmrtAKLDAyAW8f7rSqaosX24Na0fGp4i7Knimrz+ZIUHyfGNdRm0BaKAjNQfOl6h5joUr9Gm1VNpCR/x/uf1E+7zRHFNXieCnz6QQ0lAYGIiA5EaH4pjF9Sc77rkDUxmCzS9g1RszkfYK6Lp7uKavE4ERJiWzo5BR/cAJ/OhvU1H9yBYFoiJohaBL7C3YNPdxTUpERCXy01XQi4V43gFlaeeqjbt9V3JqEXgE+wt2HR3cU1KBMTl/GQSLEhX4GRVJ600niK1dgAM4PYaToQf8rJUeLAwHQFyMQAgLEiGBwvT3d5FTomAuMWy7BgMGS0or+3kOhRBU2v1iAz1g0wq5joU4iF5WSr83wdzAQDr85I8Mk5KiYC4RWpCGJRh/jh+gWYPTUVb1wBtT+mDoiMCoAzzR0W91iPHo0RA3IJhGCzNVqG6qZfTvViFzGpl0d49QFNHfVT2jEhUN/bAZHZ/9yolAuI2S7NjwAA4QWsKnNJ1bRBmi5Wmjvqo7OQIGM1W1DT1uv1YlAiI20SE+CEzKRylF9tpTYET2rTDNYZoxpBvSksMh1QiwgUPdA/xvvooEbaoMH9UNvTgP58/PFqymhYJOkatHdmnmLqGfJFcKkZaYhgq6rvdfixqERC3KatsR+mYbiFP1U3xFuquAYQEyhDoJ+U6FMKR7BmR6OgeQGfPgFuPQ4mAuM3uo3UwWcZ3CXmiboq3oF3JyOzrOzO6u1VAiYC4DVd1U7wBy7Jou75PMfFd0eEBUIa7fxopJQLiNlzVTfEG1/RGDBrMNHWUeGQaKSUC4ja26qZIxYzb66Z4A3XXyEAxtQh83ezkSLdPI6VZQ8Rtbt7oHgCWz42lWUMOaL2eCOIoEfi8Xt3wd+fXu867beYdJQLiViMb3VutLP77lRPoofEBh7R26RHoJ0FoIG3T6svKKtux82Dt6O2RmXcAXJoMqGuIeIRIxGBhRjQu1GmhGzRxHQ7vtXbpERcVCIZhuA6FcGj30ToYzdZx97lj5h0lAuIxizKjYbGyOHe5i+tQeI1lWbRq9IhTBHEdCuGYp2beUSIgHpOkCkZkiByna6g09a309BswaDAjTkHjA77OUzPvKBEQj2EYBjlpSlRe7cbAkJnrcHirjQaKyXWemnlHiYB4VG66EhYri/NXqHvInhbN9e0pKRH4vJEdy8a2AFblxLt81hAlAuJR02NDEB5M3UO30talR0igDMEBNGOIDCeDX31nKf6yfSUC/STo1xvtPre6qcepY1AiIB4lYhjkpClQUd+NQQN1D9nS2qWjbiEygUQsQk6aAmcud8Fgsr3KuLxG49R7UyIgHrcgTQmzxYrzddQ9dDMryw5PHaWBYmLDooxoGIwWXKizXXuoqb3fqfelREA8bmZ8KEKDZCivdu7qxZtprw3BaLJSi4DYlJYYjtAgmc1d/zS9g+jROTetlBIB8TgRwyAnVYEL9VoMGal7aKzW6wPFtIaA2CISMVgxOxYVddoJe4FXNTo3PgBQIiAcyU1XwmS2emT3JSFp7dIBoO0piX0r58WBYRh8Vt4y7v4ztRqEBTm3voBqDRFOpMSHISRAilPVnchNV3IdDm+0avSICJEjwI++msS28GA5FmVG4/DZVkSG+uHgyabRlcYr5sY69Z7UIiCcEIkYzE9ToqJOC6OdGRC+qKlTh0RlMNdhEJ67Z8V0WKws/vXZ5XHlJq60OFeqmhIB4UxOqgIGkwUXr1L3EAAYTRaotXokKGl8gNxaVKg//KQisON3goX5pq1hHUWJgHAmLTEMgX4SlNPiMgDDFUdZFkiMpkRAbm/A4LqWNCUCwhmJWIS5KVE4d0ULs8V6+xd4uaaO4TngCdHUNURuz5WF5ygREE7lpCkxaDBPaeqbt2jq1MFfLkZUqB/XoRABsFmQTuLcT7rTUxPa2tqwfft2aLVaTJ8+HS+88AICA8dPeWttbUVRURESExMBAFFRUdixY4ezhyReKCspAn4yMcprOpE9I5LrcDjV3KFDgiIIItqMhjjg5q1gI0PkuHelc1VJnU4EP/vZz3D//fdj/fr1+MMf/oBXXnkF27dvH/ecixcvori4GE8//bSzhyFeTioRYc7MKJyp7cIDBVaIRb7ZSLWyLJo7dVg2O4brUIiAjGwFO0Ikcu4iwqlvnclkwqlTp1BQUAAAKCkpwYEDByY8r6KiArW1tdiwYQO2bNmCmpoap4Ik3i0nVQHdoAm1zde4DoUzmp5BGEwWJNKMIcIBp1oEPT09CAoKgkQy/HKFQoGOjo4Jz5PL5bj77ruxadMmHDt2DN/97nexb98+yGSOldeNjKQvxQiFwnsHEFeF+OOvH1XhUlMvVixIvO3zvfFcVLf2AQBmp0dP6u/zxnPhLDoXzrttIti/fz+effbZcfdNmzZtwqbatjbZ/v73vz/67/z8fLz44ouor69Henq6Q8FptTpYrc7Ni/UmCkUwNBrnqgoKxazpEThxvhX3LEu6ZR+5t56LyisaiEUMAsRw+O/z1nPhDDoXw0QixqkL6NsmgsLCQhQWFo67z2QyYdGiRbBYLBCLxdBoNFAqJ5YJePPNN1FUVITw8HAAw5tyj7QiCBkrJ02BM7Ua1Lf1YWZcKNfheFxDez9iIgMhlYi5DoX4IKfGCKRSKRYsWIB9+/YBAD744AOsWLFiwvNOnTqFd999FwBw8uRJWK1WzJgxYwrhEm81JzkKYhHjk4vLWJbF1bY+zIgN4ToU4qOcnqLx1FNPYdeuXVi3bh1Onz6NH/7whwCAt956C7/97W8BAE888QRKS0tRVFSE559/Hi+++CJEPjorhNxagJ8EWdMjUF6jAXvzunkv19kziAGDmRIB4YzT/TRxcXF48803J9y/efPm0X9HR0fjtddec/YQxMfMT1XgQp0WTR06TFN5/8BfWWX76BxwAOgbsL8XLSHuRJfnhDfmpURBxDAor/X+7qGyyna8sb96XOXIvcevoqyyncOoiK+iREB4IzhAhrTEMKc34BaS3UfrYDSPr69ksrDYfbSOo4iIL6NEQHglJ00BtXYArV16rkNxq7EtAUfuJ8SdKBEQXpmfqgADeP3sIXuVI11ZUZIQR1EiILwSFiRHclyo13cP2aocKZOIUJLvXNEwQqaCEgHhnZw0BZo7dejsGeA6FLfJy1LhwcL00WQQGSLHg4Xp4wqIEeIplAgI7+SkKgAA5bXe3SpYnBkNmVSMpbNU+NV3llISIJyhREB4JyrMH9NUwV7fPdSmHYBu0ITUhDCuQyE+jhIB4aUFaQrUt/Whu2+I61Dcpra5FwCQmkiJgHCLEgHhpZy04SKG3tw9VNvci7AgGZRh/lyHQnwcJQLCS6qIAMRFBXpt9xDLsqhp6kFqQpjNEu6EeBIlAsJbuelKXG7u9cruobYuPXp1RmRMC+c6FEIoERD+WjxLBRbwyvo7FfXdAIDsGZEcR0IIJQLCY8owf6TEh6L0YrvXlaauqNciThGIiBA/rkMhhBIB4be8WSqotQNo7PCebQgHDWbUNvdSa4DwBu0bSXgtN12JnQdr8ct/nsWQ0QJFuD82Lpsu6MVXlxp6YLGyyJ4ewXUohACgFgHhuQt1WlhZFkNGCwBA0zOIN/ZXC3rc4HRNJ4L8pUihhWSEJygREF7bfbQONw8PGM1WwdbtN5osOHe5C/NTFZCI6etH+IE+iYTXvK1uf0W9FgaTBQszlFyHQsgoSgSE17ytbv8XlR0IDpAijcpKEB6hREB4zZvq9vf0G3D2cheWzoqBWERfPcIfNGuI8NrI7KDdR+ug7TOAYYCvr0kV5Kyhz8+3wcqyyJ8Xy3UohIxDiYDwXl6WCnlZKtQ29+K5nWdgvmnTd74qq2wfTWARwTIMmayYNT0C0eEBXIdGyDjUPiWCkRIfivRp4dj/ZRPMFn4ng7LKdryxv3p0ULu734iBITPilUEcR0bIRNQiIILBMAy+clcq/nfHl/jyUgeWZseMu+qODJGjJD95yt1G/QNGVDf1oqVTh0GDGYH+UsRFBSJ9WjiC/KUOvcfuo3Uw2mi5nLzUjq+umjml+AhxNUoERFByM6IRrwjCR2WNAIA3P64Z/cHV9hnwxv5qAHAqGai1euw5fhXlNRpYrCwYBvCTiTFoGF7MJhYxmJcShdW5CUiJv/WsH3vTW7v7jZOOixB3o0RABIVhGNyzfDp+v7sCb312ecJV98his8kkApPZivc/r8cnp5shlYhwx/x4LMxUYlp0MCRiEUxmKxrb+3G6phMnKtQ4XaPBrBkRuHdFMqapgm2+Z2SI3GYyEDHD3UZCHOwm3osSARGcuSlRyJgWjqrGHpuPT2axmVqrx5/3VKKpU4cVc2Jwz4pkhAbKxj1HKhFhZnwoZsaH4p4VM3DoTAv2lTXiZ6+fwryUKNy9dPqEhFCSn4zXPqqC2Tp+WbSVxZRaLYS4AyUCIjgMw2DTnSl46m8nbT5ua7GZrbEEEcPgtf1VkEnEePS+2Zg7M+q2x5ZLxShcNA35c+Jw8FQTPjndgrOXTyErKRw56UrERgbCaLKgpmm4sJwtzrRaCHEnSgREkBKUQcieETG6wcsIW4vNRmbwjB1L2PHhJVjZ4ZlIj2yYhfDgya1UDvCTYOPyGViTm4jPyptx7IIafz9QM/q4RDzcxfTZmRabrxdqiQzinSgREMH6Xsls/PQvZege86Mqk06cEW1rBo+VBeRSEbZvnjel4m8BfhIUL52OoiVJ6OwZRGfvIKRiEaapguEvl+DcFY3NH32hlsgg3onWERDBkkpEuDMnftx9ukHzhDLV9q6+DSaryyqAMgyD6IgAZM+IRPq0cPjLh6+xvKlEBvFelAiIoO3/onHCfTeXqQ4Lkk14DuCZq/K8LBUeLEwfPVZkiBwPFqbT+ADhFeoaIoJVVtkO3aDZ5mPaPgN2HbqCxo5+9Oomzt335FX5SIkMQviKEgERrNttTvNpeTNUEQEoXpKEQH8JPjnV7NIVyIR4C0oERLBuNfMm0E+M3/8wf9x9a3IT3R0SIYJEYwREsG7Vx68fsngwEkKEjRIBEaxb9fHT9ExCHDflRPCb3/wGv//9720+ZjQasX37dhQWFuKee+5BXZ0wNxwn/JSXpcIqG5u80PRMQibH6UTQ39+Pxx9/HK+99prd57z55pvw9/fH/v378fjjj+OnP/2ps4cjxKYHCtLxcHEmTc8kZAqcHiz+7LPPkJSUhIceesjuc44cOYIf/OAHAIDc3Fx0d3ejra0NsbG0VR9xHZqeScjUON0i2LhxI771rW9BLBbbfU5nZycUCsXobYVCgfb2drvPJ4QQ4nm3bRHs378fzz777Lj7ZsyYgddff/22b86yLBiGGXdbJHI890RG0rZ+IxQK23XvfRGdixvoXNxA58J5t00EhYWFKCwsdOrNo6Oj0dnZicTE4fnbXV1dUCqVDr9eq9XBaqeUry9RKIKh0fRzHQYv0Lm4gc7FDXQuholEjFMX0G6dPpqfn489e/YAAE6fPg25XE7jA4QQwjMuTwRvvfUWfvvb3wIAHnjgARiNRqxfvx7PPPMMfvnLX7r6cIQQQqaIYVmWt30vPT166hrC8FiJVqvjOgxeoHNxA52LG+hcDBOJGISHB076dbxOBIQQQtyPSkwQQoiPo0RACCE+jhIBIYT4OEoEhBDi4ygREEKIj6NEQAghPo4SASGE+DhKBIQQ4uMoERBCiI/jZSLYu3cv1q1bhzVr1mDnzp1ch8Opl19+GevXr8f69eupVhOA559/Ho899hjXYXDu0KFDKCkpQWFhIX7+859zHQ6n9uzZM/odef7557kOx+N0Oh2KiorQ0tICACgtLUVxcTHWrFmDl156ybE3YXmmvb2dXbVqFdvT08Pq9Xq2uLiYvXz5MtdhceLEiRPs1772NdZgMLBGo5HdsmULe/DgQa7D4kxpaSm7aNEi9ic/+QnXoXCqqamJXbZsGatWq1mj0chu3ryZPXLkCNdhcWJgYIDNzc1ltVotazKZ2Pvuu489ceIE12F5zLlz59iioiI2KyuLbW5uZgcHB9n8/Hy2qamJNZlM7NatWx36bPCuRVBaWorFixcjLCwMAQEBKCgowIEDB7gOixMKhQKPPfYYZDIZpFIpkpOT0dbWxnVYnOjt7cVLL72ERx55hOtQOPfJJ59g3bp1UKlUkEqleOmllzBnzhyuw+KExWKB1WrF4OAgzGYzzGYz5HI512F5zK5du/DUU0+N7vNy4cIFTJs2DQkJCZBIJCguLnbo99PpPYvd5ebtLZVKJS5cuMBhRNxJSUkZ/XdDQwP279+Pt956i8OIuPPkk09i27ZtUKvVXIfCucbGRkilUjzyyCNQq9VYuXIlfvjDH3IdFieCgoLwgx/8AIWFhfD390dubi7mz5/PdVge88wzz4y7bev3s6Oj47bvw7sWgdVqnbC95djbvujy5cvYunUrfvzjHyMpKYnrcDzunXfeQUxMDPLy8rgOhRcsFgvKysrwi1/8Am+//TYuXLiA999/n+uwOFFdXY333nsPhw8fxrFjxyASibBjxw6uw+KMs7+fvEsEKpUKGo1m9LZGo5nU9pbepry8HN/4xjfwox/9CPfccw/X4XBi3759OHHiBDZs2IDf/e53OHToEH7xi19wHRZnoqKikJeXh4iICPj5+eGuu+7y2Vbz8ePHkZeXh8jISMhkMpSUlODkyZNch8UZZ38/eZcIlixZgrKyMnR3d2NwcBAHDx7EihUruA6LE2q1Gt/97nfxwgsvYP369VyHw5nXXnsNH374Ifbs2YNHH30Ud9xxBx5//HGuw+LMqlWrcPz4cfT19cFiseDYsWPIysriOixOpKeno7S0FAMDA2BZFocOHUJ2djbXYXFmzpw5uHr1KhobG2GxWPDhhx869PvJuzGC6OhobNu2DVu2bIHJZMJ9992H2bNncx0WJ3bs2AGDwYDnnntu9L5NmzZh8+bNHEZFuDZnzhx885vfxP333w+TyYSlS5fi3nvv5TosTixbtgyXLl1CSUkJpFIpsrOz8a1vfYvrsDgjl8vx3HPP4fvf/z4MBgPy8/Oxdu3a276OdigjhBAfx7uuIUIIIZ5FiYAQQnwcJQJCCPFxlAgIIcTHUSIghBAfR4mAEEJ8HCUCQgjxcZQICCHEx/1/ugEVooBh7M4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "x = 10 * rng.rand(50)\n",
    "y = np.sin(x) + 0.1 * rng.randn(50)\n",
    "xfit = np.linspace(0, 10, 1000)\n",
    "\n",
    "gauss_model = make_pipeline(GaussianFeatures(20),\n",
    "                            LinearRegression())\n",
    "gauss_model.fit(x[:, np.newaxis], y)\n",
    "yfit = gauss_model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit)\n",
    "plt.xlim(0, 10);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "There is nothing magic about polynomial basis functions: \n",
    "- You should have some sort of intuition about **the generating process of your data**; \n",
    "- If you think one basis or another might be appropriate, you can use them as well."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Regularization 正则化\n",
    "\n",
    "The introduction of basis functions into our linear regression makes the model much more flexible, \n",
    "- but it also can very quickly lead to over-fitting (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this).\n",
    "\n",
    "For example, if we choose too many Gaussian basis functions, we end up with results that don't look so good:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:20.681241Z",
     "start_time": "2019-06-20T03:53:20.448139Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = make_pipeline(GaussianFeatures(30),\n",
    "                      LinearRegression())\n",
    "model.fit(x[:, np.newaxis], y)\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, model.predict(xfit[:, np.newaxis]))\n",
    "\n",
    "plt.xlim(0, 10)\n",
    "plt.ylim(-5, 1.5);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "With the data projected to the 30-dimensional basis, the model has far too much flexibility and goes to extreme values between locations where it is constrained by data.\n",
    "\n",
    "We can see the reason for this if we plot the coefficients of the Gaussian bases with respect to their locations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:21.036363Z",
     "start_time": "2019-06-20T03:53:20.683915Z"
    },
    "code_folding": [
     0
    ],
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def basis_plot(model, title=None):\n",
    "    fig, ax = plt.subplots(2, sharex=True)\n",
    "    model.fit(x[:, np.newaxis], y)\n",
    "    ax[0].scatter(x, y)\n",
    "    ax[0].plot(xfit, model.predict(xfit[:, np.newaxis]))\n",
    "    ax[0].set(xlabel='x', ylabel='y', ylim=(-5, 1.5))\n",
    "    \n",
    "    if title:\n",
    "        ax[0].set_title(title)\n",
    "\n",
    "    ax[1].plot(model.steps[0][1].mu_,\n",
    "               model.steps[1][1].coef_)\n",
    "    ax[1].set(xlabel='basis location',\n",
    "              ylabel='coefficient',\n",
    "              xlim=(0, 10))\n",
    "    \n",
    "model = make_pipeline(GaussianFeatures(30), LinearRegression())\n",
    "basis_plot(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "This is typical over-fitting behavior when basis functions overlap: \n",
    "- the coefficients of adjacent basis functions blow up and cancel each other out.\n",
    "\n",
    "We know that such behavior is problematic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "It would be nice if we could limit such spikes expliticly in the model \n",
    "- by **penalizing large values of the model parameters**.\n",
    "\n",
    "Such a penalty is known as *regularization*, and comes in several forms."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Ridge regression ($L_2$ Regularization) 岭回归\n",
    "\n",
    "\n",
    "*ridge regression* or $L_2$ *regularization*, sometimes also called *Tikhonov regularization*.\n",
    "- Perhaps the most common form of regularization\n",
    "\n",
    "This proceeds by penalizing the **sum of squares** (2-norms) of the model coefficients; \n",
    "- The penalty on the model fit would be \n",
    "$$\n",
    "P = \\alpha\\sum_{n=1}^N \\theta_n^2\n",
    "$$\n",
    "\n",
    "where $\\alpha$ is a free parameter that controls the strength of the penalty.\n",
    "\n",
    "This type of penalized model is built into Scikit-Learn with the ``Ridge`` estimator:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:21.417547Z",
     "start_time": "2019-06-20T03:53:21.038963Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "model = make_pipeline(GaussianFeatures(30), Ridge(alpha=0.1))\n",
    "basis_plot(model, title='Ridge Regression')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The $\\alpha$ parameter is essentially a knob controlling the complexity of the resulting model.\n",
    "- In the limit $\\alpha \\to 0$, we recover the standard linear regression result; \n",
    "- in the limit $\\alpha \\to \\infty$, all model responses will be suppressed.\n",
    "\n",
    "One advantage of ridge regression in particular is that it can be computed very efficiently\n",
    "- at hardly more computational cost than the original linear regression model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Lasso regression ($L_1$ regularization) 套索回归\n",
    "\n",
    "Lasso regression involves penalizing the **sum of absolute values** (1-norms) of regression coefficients:\n",
    "$$\n",
    "P = \\alpha\\sum_{n=1}^N |\\theta_n|\n",
    "$$\n",
    "Though this is conceptually very similar to ridge regression, the results can differ surprisingly: \n",
    "- for example, due to geometric reasons lasso regression tends to favor *sparse models* where possible: \n",
    "    - it preferentially sets model coefficients to exactly zero.\n",
    "\n",
    "We can see this behavior in duplicating the ridge regression figure, but using L1-normalized coefficients:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T03:53:42.247833Z",
     "start_time": "2019-06-20T03:53:41.965859Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Lasso\n",
    "model = make_pipeline(GaussianFeatures(30), Lasso(alpha=0.01))\n",
    "basis_plot(model, title='Lasso Regression')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "With the lasso regression penalty, **the majority of the coefficients are exactly zero**, \n",
    "- with the functional behavior being modeled by a small subset of the available basis functions.\n",
    "\n",
    "As with ridge regularization, the $\\alpha$ parameter tunes the strength of the penalty, and should be determined via, for example, cross-validation (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Example: Predicting Bicycle Traffic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "To predict the number of bicycle trips across Seattle's Fremont Bridge based on weather, season, and other factors.\n",
    "\n",
    "We have seen this data already in [Working With Time Series](03.11-Working-with-Time-Series.ipynb).\n",
    "\n",
    "- we will join the bike data with another dataset, and \n",
    "- try to determine the extent to which weather and seasonal factors—temperature, precipitation, and daylight hours—affect the volume of bicycle traffic through this corridor.\n",
    "\n",
    "- the NOAA makes available their daily [weather station data](http://www.ncdc.noaa.gov/cdo-web/search?datasetid=GHCND) (I used station ID USW00024233) \n",
    "- we can easily use Pandas to join the two data sources.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We will perform a simple linear regression to relate weather and other information to bicycle counts, in order to estimate how a change in any one of these parameters affects the number of riders on a given day.\n",
    "\n",
    "In particular, this is an example of how the tools of Scikit-Learn can be used in a statistical modeling framework, in which the parameters of the model are assumed to have interpretable meaning.\n",
    "\n",
    "Let's start by loading the two datasets, indexing by date:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "# !curl -o FremontBridge.csv https://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:10.611735Z",
     "start_time": "2019-06-19T10:12:56.675274Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "counts = pd.read_csv('data/Fremont_Bridge.csv', index_col='Date', parse_dates=True)\n",
    "weather = pd.read_csv('data/BicycleWeather.csv', index_col='DATE', parse_dates=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Next we will compute the total daily bicycle traffic, and put this in its own dataframe:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:17.154363Z",
     "start_time": "2019-06-19T10:13:17.129550Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "daily = counts.resample('d').sum()\n",
    "daily['Total'] = daily.sum(axis=1)\n",
    "daily = daily[['Total']] # remove other columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We saw previously that the patterns of use generally vary from day to day; let's account for this in our data by adding binary columns that indicate the day of the week:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:18.667135Z",
     "start_time": "2019-06-19T10:13:18.615013Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n",
    "for i in range(7):\n",
    "    daily[days[i]] = (daily.index.dayofweek == i).astype(float)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Similarly, we might expect riders to behave differently on holidays; let's add an indicator of this as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:20.688777Z",
     "start_time": "2019-06-19T10:13:20.633802Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from pandas.tseries.holiday import USFederalHolidayCalendar\n",
    "cal = USFederalHolidayCalendar()\n",
    "holidays = cal.holidays('2012', '2016')\n",
    "daily = daily.join(pd.Series(1, index=holidays, name='holiday'))\n",
    "daily['holiday'].fillna(0, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We also might suspect that the hours of daylight would affect how many people ride; let's use the standard astronomical calculation to add this information:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:22.812937Z",
     "start_time": "2019-06-19T10:13:22.447847Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8, 17)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def hours_of_daylight(date, axis=23.44, latitude=47.61):\n",
    "    \"\"\"Compute the hours of daylight for the given date\"\"\"\n",
    "    days = (date - pd.datetime(2000, 12, 21)).days\n",
    "    m = (1. - np.tan(np.radians(latitude))\n",
    "         * np.tan(np.radians(axis) * np.cos(days * 2 * np.pi / 365.25)))\n",
    "    return 24. * np.degrees(np.arccos(1 - np.clip(m, 0, 2))) / 180.\n",
    "\n",
    "daily['daylight_hrs'] = list(map(hours_of_daylight, daily.index))\n",
    "daily[['daylight_hrs']].plot()\n",
    "plt.ylim(8, 17)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We can also add the average temperature and total precipitation to the data.\n",
    "In addition to the inches of precipitation, let's add a flag that indicates whether a day is dry (has zero precipitation):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:24.141309Z",
     "start_time": "2019-06-19T10:13:24.111539Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# temperatures are in 1/10 deg C; convert to C\n",
    "weather['TMIN'] /= 10\n",
    "weather['TMAX'] /= 10\n",
    "weather['Temp (C)'] = 0.5 * (weather['TMIN'] + weather['TMAX'])\n",
    "\n",
    "# precip is in 1/10 mm; convert to inches\n",
    "weather['PRCP'] /= 254\n",
    "weather['dry day'] = (weather['PRCP'] == 0).astype(int)\n",
    "\n",
    "daily = daily.join(weather[['PRCP', 'Temp (C)', 'dry day']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Finally, let's add a counter that increases from day 1, and measures how many years have passed.\n",
    "This will let us measure any observed annual increase or decrease in daily crossings:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:25.499260Z",
     "start_time": "2019-06-19T10:13:25.494251Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "daily['annual'] = (daily.index - daily.index[0]).days / 365."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Now our data is in order, and we can take a look at it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:26.735867Z",
     "start_time": "2019-06-19T10:13:26.713419Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total</th>\n",
       "      <th>Mon</th>\n",
       "      <th>Tue</th>\n",
       "      <th>Wed</th>\n",
       "      <th>Thu</th>\n",
       "      <th>Fri</th>\n",
       "      <th>Sat</th>\n",
       "      <th>Sun</th>\n",
       "      <th>holiday</th>\n",
       "      <th>daylight_hrs</th>\n",
       "      <th>PRCP</th>\n",
       "      <th>Temp (C)</th>\n",
       "      <th>dry day</th>\n",
       "      <th>annual</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2012-10-03</th>\n",
       "      <td>3521.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.277359</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13.35</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-04</th>\n",
       "      <td>3475.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.219142</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13.60</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.002740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-05</th>\n",
       "      <td>3148.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.161038</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15.30</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.005479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-06</th>\n",
       "      <td>2006.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.103056</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15.85</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.008219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-07</th>\n",
       "      <td>2142.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.045208</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15.85</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.010959</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Total  Mon  Tue  Wed  Thu  Fri  Sat  Sun  holiday  daylight_hrs  \\\n",
       "Date                                                                           \n",
       "2012-10-03  3521.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0      0.0     11.277359   \n",
       "2012-10-04  3475.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0      0.0     11.219142   \n",
       "2012-10-05  3148.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0      0.0     11.161038   \n",
       "2012-10-06  2006.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0      0.0     11.103056   \n",
       "2012-10-07  2142.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0      0.0     11.045208   \n",
       "\n",
       "            PRCP  Temp (C)  dry day    annual  \n",
       "Date                                           \n",
       "2012-10-03   0.0     13.35      1.0  0.000000  \n",
       "2012-10-04   0.0     13.60      1.0  0.002740  \n",
       "2012-10-05   0.0     15.30      1.0  0.005479  \n",
       "2012-10-06   0.0     15.85      1.0  0.008219  \n",
       "2012-10-07   0.0     15.85      1.0  0.010959  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "daily.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "With this in place, we can choose the columns to use, and fit a linear regression model to our data.\n",
    "We will set ``fit_intercept = False``, because the daily flags essentially operate as their own day-specific intercepts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:27.927366Z",
     "start_time": "2019-06-19T10:13:27.905981Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# Drop any rows with null values\n",
    "daily.dropna(axis=0, how='any', inplace=True)\n",
    "\n",
    "column_names = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'holiday',\n",
    "                'daylight_hrs', 'PRCP', 'dry day', 'Temp (C)', 'annual']\n",
    "X = daily[column_names]\n",
    "y = daily['Total']\n",
    "\n",
    "model = LinearRegression(fit_intercept=False)\n",
    "model.fit(X, y)\n",
    "daily['predicted'] = model.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Finally, we can compare the total and predicted bicycle traffic visually:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:29.547211Z",
     "start_time": "2019-06-19T10:13:29.160396Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "daily[['Total', 'predicted']].plot(alpha=0.5);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "It is evident that we have missed some key features, especially during the summer time.\n",
    "\n",
    "- Either our features are not complete\n",
    "    - i.e., people decide whether to ride to work based on more than just these\n",
    "- or there are some nonlinear relationships that we have failed to take into account \n",
    "    - e.g., perhaps people ride less at both high and low temperatures\n",
    "\n",
    "Nevertheless, our rough approximation is enough to give us some insights, and we can take a look at the coefficients of the linear model to estimate how much each feature contributes to the daily bicycle count:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:30.982323Z",
     "start_time": "2019-06-19T10:13:30.975923Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mon              504.882756\n",
       "Tue              610.233936\n",
       "Wed              592.673642\n",
       "Thu              482.358115\n",
       "Fri              177.980345\n",
       "Sat            -1103.301710\n",
       "Sun            -1133.567246\n",
       "holiday        -1187.401381\n",
       "daylight_hrs     128.851511\n",
       "PRCP            -664.834882\n",
       "dry day          547.698592\n",
       "Temp (C)          65.162791\n",
       "annual            26.942713\n",
       "dtype: float64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = pd.Series(model.coef_, index=X.columns)\n",
    "params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "These numbers are difficult to interpret without some measure of their uncertainty.\n",
    "We can compute these uncertainties quickly using bootstrap resamplings of the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:34.166072Z",
     "start_time": "2019-06-19T10:13:32.189653Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.utils import resample\n",
    "np.random.seed(1)\n",
    "err = np.std([model.fit(*resample(X, y)).coef_\n",
    "              for i in range(1000)], 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "With these errors estimated, let's again look at the results:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T10:13:34.177551Z",
     "start_time": "2019-06-19T10:13:34.168739Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              effect  error\n",
      "Mon            505.0   86.0\n",
      "Tue            610.0   83.0\n",
      "Wed            593.0   83.0\n",
      "Thu            482.0   85.0\n",
      "Fri            178.0   81.0\n",
      "Sat          -1103.0   80.0\n",
      "Sun          -1134.0   83.0\n",
      "holiday      -1187.0  163.0\n",
      "daylight_hrs   129.0    9.0\n",
      "PRCP          -665.0   62.0\n",
      "dry day        548.0   33.0\n",
      "Temp (C)        65.0    4.0\n",
      "annual          27.0   18.0\n"
     ]
    }
   ],
   "source": [
    "print(pd.DataFrame({'effect': params.round(0),\n",
    "                    'error': err.round(0)}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- We first see that there is a relatively stable trend in the weekly baseline: \n",
    "    - there are many more riders on weekdays than on weekends and holidays.\n",
    "- We see that for each additional hour of daylight, 129 ± 9 more people choose to ride; \n",
    "- a temperature increase of one degree Celsius encourages 65 ± 4 people to grab their bicycle; \n",
    "- a dry day means an average of 548 ± 33 more riders, and each inch of precipitation means 665 ± 62 more people leave their bike at home.\n",
    "\n",
    "Once all these effects are accounted for, we see a modest increase of 27 ± 18 new daily riders each year.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- Our model is almost certainly missing some relevant information. \n",
    "    - For example, nonlinear effects \n",
    "        - such as effects of precipitation *and* cold temperature \n",
    "    - nonlinear trends within each variable \n",
    "        - such as disinclination to ride at very cold and very hot temperatures\n",
    "- Additionally, we have thrown away some of the finer-grained information\n",
    "    - such as the difference between a rainy morning and a rainy afternoon, \n",
    "- and we have ignored correlations between days\n",
    "    - such as the possible effect of a rainy Tuesday on Wednesday's numbers, \n",
    "    - or the effect of an unexpected sunny day after a streak of rainy days.\n",
    "    \n",
    "These are all potentially interesting effects, and you now have the tools to begin exploring them if you wish!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<!--NAVIGATION-->\n",
    "< [In Depth: Naive Bayes Classification](09.05-Naive-Bayes.ipynb) | [Contents](Index.ipynb) | [In-Depth: Support Vector Machines](09.07-Support-Vector-Machines.ipynb) >"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": false,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "268px",
    "left": "1058px",
    "top": "113px",
    "width": "180px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
